package Year22_Month06.day06;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class 二叉树的右视图_BFS {
    public List<Integer> rightSideView(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();//创建一个队列用来广度遍历二叉树
        List<Integer> list = new ArrayList<>();//用来接收每一层的最后一个值
        if(root != null){
            queue.offer(root);
        }
        while(!queue.isEmpty()){
            //获得每一层的数量个数
            int size = queue.size();
            //注意我这里对于节点的操作是先peek然后是Poll,不是以上来就是poll
            while(size > 0){
                TreeNode node = queue.peek();
                if(node.left != null){
                    queue.offer(node.left);
                }
                if(node.right != null){
                    queue.offer(node.right);
                }
                if(size == 1){
                    list.add(node.val);
                }
                queue.poll();
                size--;
            }
        }
        return list;
    }
}
